\chapter{Tipos de Datos }
Matemáticamente un tipo de dato es un algebra $(V,F)$, donde:
\begin{enumerate}
   \item $V$, es un conjunto finito de valores 
   \item $F$, es un conjunto finito de funciones $F_i:V_{i_1} * \dots * V_{i_n} \to V_{i_k}$, con $V_{i_j} \in V$ para $j=k$ y $j=1, \dots, n$ [majster].
\end{enumerate}
todo esto agregado a un conjunto finito de axiomas, que relacionan a las operaciones en $F$.

Observe como ejemplo, la siguiente definición formal del tipo de datos $Stack$ (Pila) de enteros:
\\
\\
\noindent
$V=\{\mathbb{Z}\cup\{error\}, Stack\cup\{error\}\}$
\begin{func}
   \item $create: \qquad \to Stack$
   \item $push: Stack \times \mathbb{Z} \to Stack$
   \item $pop: Stack \to Stack \cup \{error\}$
   \item $top: Stack \to \mathbb{Z} \cup \{error\}$
\end{func}
con los axiomas:

\begin{axiom}
   \item $top (push (s,i)) = i$
   \item $pop (push (s,i))=s$
   \item $top (create) = error$
   \item $pop (create) = error$
\end{axiom}

%TODO Dibujar una pila de enteros señalando la acción de cada función.
%TODO Dejar como ejercicios la implementación de esta pila.


